package com.wang.concurrency;

import java.util.List;

public class doc{

	
	
	/*
 
线程生命周期: 新建NEW -> 就绪RUNNABLE -> 运行RUNNING -> 阻塞BLOCKED -> 死亡DEAD五种状态切换. 

 当发生如下情况时,线程会进入阻塞状态
线程调用sleep()主动放弃处理器;
线程调用阻塞IO, 其IO资源未到;
线程试图获得同步监视器, 但同步监视器被其他线程持有;
线程等待某个通知wait();
调用了线程的suspend()方法(该方法将导致线程挂起,但这样容易导致死锁,不建议使用[详细见线程同步]).


当发生如下情况, 线程可以解除阻塞, 重新进入就绪:
线程sleep()到达指定时间;
阻塞IO返回;
成功获得同步监视器;
线程收到了其他线程发出的通知notify();
被suspend()的线程被调用了resume()恢复方法;


线程死亡
run() / call()方法执行完成, 线程正常结束;
线程抛出未捕获的Exception或Error;
直接调用线程的stop()方法结束该线程(该方法容易导致死锁,不建议使用).


后台线程
后台线程的特征: 所有前台线程死亡, 后台线程会自动死亡.
主线程默认是非后台线程, 非后台线程创建的默认是非后台线程, 反之亦然


Yield
yield()方法让当前正在执行的线程暂停,但不是阻塞线程,而是让该线程转入就绪状态,重新等待调度
注意: yield()方法可移植性并不是很好, 而且很有可能导致死锁.所以并不推荐使用(详细见线程同步).


线程优先级
1~10
MIN_PRIORITY = 1;
 NORM_PRIORITY = 5;
 MAX_PRIORITY = 10;
 
 
 
 同步监视器释放
 synchronized
释放同步监视器锁定:
当前线程的同步方法/同步代码块执行结束, 释放同步监视器;
当前线程在同步代码块/同步方法中遇到break/return终止该代码块/方法的执行, 释放同步监视器.
当前线程在同步代码块/同步方法中出现了未处理的Error/Exception, 导致异常结束, 释放同步监视器.
当前线程调用了同步对象的wait()方法,当前线程暂停,并释放同步监视器.


不释放同步监视器:
程序调用Thread.sleep()/Thread.yield()方法暂停当前线程执行.
其他线程调用当前线程的suspend()方法将线程挂起.
 
 
 
 使用Lock对象进行线程同步, 当加锁/释放锁出现在不同的作用范围时, 通常建议使用finally块来确保一定会释放锁.
 
 
 
 
 
 
 
 
 
 
 



	 */
	public static void main(String[] args) {
		Thread thread = new Thread("");

	}

}
